home *** CD-ROM | disk | FTP | other *** search
/ Mac Magazin/MacEasy 24 / Mac Magazin and MacEasy Magazine CD - Issue 24.iso / Utilities / Un*x Amiga Emulator v0.6.0 / Amiga tools / transdisk.c < prev    next >
C/C++ Source or Header  |  1996-04-12  |  3KB  |  109 lines

  1.  
  2. /*
  3.  * Transdisk V3
  4.  * Copyright 1995,1996 Bernd Schmidt, Marcus Sundberg
  5.  *
  6.  * Use DICE and 2.0 includes or above to compile
  7.  */
  8.  
  9. #include <stdio.h>
  10.  
  11. #include <exec/devices.h>
  12. #include <exec/io.h>
  13. #include <exec/memory.h>
  14. #include <devices/trackdisk.h>
  15.  
  16. #include <clib/alib_protos.h>
  17. #include <clib/exec_protos.h>
  18.  
  19. static void usage()
  20. {
  21.     fprintf(stderr, "Usage: transdisk options\n");
  22.     fprintf(stderr, "Recognized options:\n");
  23.     fprintf(stderr, "-d device unit: Use this device instead of DF0:\n");
  24.     fprintf(stderr, "-s n: Begin transfer at track n\n");
  25.     fprintf(stderr, "-e n: End transfer at track n\n");
  26.     fprintf(stderr, "Example:\n");
  27.     fprintf(stderr, "transdisk >RAM:df1.adf.1 -d trackdisk 1 -s 0 -e 39\n");
  28.     fprintf(stderr, "transfers the first half of the floppy in DF1: into\n");
  29.     fprintf(stderr, "a file in the RAM disk.\n");
  30. }
  31.  
  32. int main(int argc, char **argv)
  33. {
  34.     struct IOStdReq *ioreq;
  35.     int signal;
  36.     struct MsgPort *port;
  37.  
  38.     UBYTE *buffer;
  39.     char devicebuf[256];
  40.     char *devicename = "trackdisk.device";
  41.     char devicenum = 0;
  42.     int i;
  43.     int starttr = 0, endtr = 79;
  44.  
  45.     for (i = 1; i < argc;) {
  46.     if (argv[i][0] != '-' || argv[i][2] != 0) {
  47.         usage();
  48.         exit(1);
  49.     }
  50.     switch (argv[i][1]) {
  51.     case 'd':
  52.         if (i+2 >= argc) {
  53.         usage();
  54.         exit(1);
  55.         }
  56.         devicenum = atoi(argv[i+2]);
  57.         sprintf(devicebuf, "%s.device", argv[i+1]);
  58.         devicename = devicebuf;
  59.         i += 3;
  60.         break;
  61.     case 's':
  62.         if (i+1 >= argc) {
  63.         usage();
  64.         exit(1);
  65.         }
  66.         starttr = atoi(argv[i+1]);
  67.         i += 2;
  68.         break;
  69.     case 'e':
  70.         if (i+1 >= argc) {
  71.         usage();
  72.         exit(1);
  73.         }
  74.         endtr = atoi(argv[i+1]);
  75.         i += 2;
  76.         break;
  77.     default:
  78.         usage();
  79.         exit(1);
  80.     }
  81.     }
  82.     fprintf(stderr,"Using %s unit %d\n", devicename, devicenum);
  83.     fprintf(stderr,"First track %d, last track %d\n", starttr, endtr);
  84.     buffer = AllocMem(512, MEMF_CHIP);
  85.     port = CreatePort(0, 0);
  86.     if (port) {
  87.     ioreq = CreateStdIO(port);
  88.     if (ioreq) {
  89.         if (OpenDevice(devicename, devicenum, ioreq, 0) == 0) {
  90.         int tr, sec;
  91.         ioreq->io_Command = CMD_READ;
  92.         ioreq->io_Length = 512;
  93.         ioreq->io_Data = buffer;
  94.         for (tr = starttr*2; tr < (endtr+1)*2; tr++) {
  95.             for (sec = 0; sec < 11; sec++) {
  96.             ioreq->io_Offset = 512 * (tr * 11 + sec);
  97.             DoIO(ioreq);
  98.             fwrite(buffer, sizeof(UBYTE), 512, stdout);
  99.             }
  100.         }
  101.         CloseDevice(ioreq);
  102.         } else
  103.         fprintf(stderr,"Unable to open %s unit %d\n", devicename, devicenum);
  104.         DeleteStdIO(ioreq);
  105.     }
  106.     }
  107.     FreeMem(buffer, 512);
  108. }
  109.